package xyz.molzhao.cfapi;

import xyz.molzhao.util.CommonUtil;

import java.util.concurrent.CompletableFuture;

/**
 * thenCompose方法的结果是上一个任务的跑完之后把结果交给下一个异步任务
 * 也就是说上一个异步任务跑完之后才会开启下一个异步任务。
 *
 * 场景：
 * 小明进门点菜，这时厨师开始做菜，等做完菜之后需要服务员打饭，在此期间小明可以玩王者等待
 * 等到服务员打饭成功后，小明开始吃饭。
 */
public class Compose {
    public static void main(String[] args) {
        CommonUtil.createBehavior("小明进门");
        CommonUtil.createBehavior("小明点了 番茄炒蛋 + 饭");

        CompletableFuture<String> order = CompletableFuture.supplyAsync(() -> {
            CommonUtil.createBehavior("厨师做菜", 1000);
            return "番茄炒蛋";
        }).thenCompose(dish -> CompletableFuture.supplyAsync(() -> {
            CommonUtil.createBehavior("服务员打饭", 1000);
            return dish + " + 饭";
        }));

        CommonUtil.createBehavior("小明打王者");
        CommonUtil.createBehavior(String.format("小明吃%s", order.join()));
    }
}
